import {NwToolDef} from './network.d'

// 下载文件，普通的下载文件
const downloadFile = function (url: string, filename: string, newTab: boolean) {
  if (!url) {
    return
  }
  const a = document.createElement('a')
  if (url.toLowerCase().startsWith('http://') || url.toLowerCase().startsWith('https://')) {
    a.href = url
  } else {
    a.href = $f.appCfg.apiBaseUrl + url
  }
  if (filename) {
    a.setAttribute('download', filename)
  }
  if (newTab) {
    a.setAttribute('target', '_blank')
  }
  a.click()
}

// 下载文件，带身份验证
// 第一个参数为url，第二个参数为文件名(可以为空，由服务器指定)，第三个参数表示是否打开新tab
// 注：如果需要在打开新的tab中进行预览，而不是直接下载，那服务器端需要增加上Content-Disposition头，参考代码:
// Response.Headers["Content-Disposition"] = $"inline; filename=${WebUtility.UrlEncode(fileName)}.pdf";
const downloadFileWithAuth = function (url: string, filename: string, newTab: boolean) {
  if (!url) {
    return
  }
  // 先尝试从 /comm/auth/get-temp-auth-token 获取到临时的访问Token
  $f.axios.get<string>('/comm/auth/get-temp-auth-token').then(result => {
    const tempAuthToken = result.data
    if (url.indexOf('?') !== -1) {
      url += '&'
    } else {
      url += '?'
    }
    url += 'tempAuthToken=' + tempAuthToken
    downloadFile(url, filename, newTab)
  }).catch((err) => {
    $f.ui.showNotifyFailed($f.getAxiosErrMsg(err))
  })
}

// 服务器会将临时文件信息缓存到Redis中，通过一个AccessCode拿到这个信息
// 此方法通过accessCode拿到文件完整的URL地址，注意：临时文件只能下载一次
const getTempFileUrl = function (accessCode: string): string {
  return $f.appCfg.apiBaseUrl + '/comm/fms/get-temp-file/' + accessCode
}

export default {
  downloadFile,
  downloadFileWithAuth,
  getTempFileUrl
} as NwToolDef
